package router

import (
	"api-gateway/handler/patient"
	"api-gateway/middleware"

	"github.com/gin-gonic/gin"
)

// SetupPatientRoutes 配置患者端路由
// 包含患者注册、登录、就诊、预约挂号、问诊、开药等功能
func SetupPatientRoutes(r *gin.Engine) {

	// ==================== 患者端公开接口（不需要认证） ====================

	// 用户认证相关
	userPublic := r.Group("/api/user")
	{
		userPublic.POST("/register", patient.Register)              // 患者注册 已测试
		userPublic.POST("/login", patient.Login)                    // 患者登录 已测试
		userPublic.POST("/forgot-password", patient.ForgotPassword) // 忘记密码
		userPublic.POST("/reset-password", patient.ResetPassword)   // 重置密码
	}

	// 医院相关（公开查询）
	hospital := r.Group("/api/hospital")
	{
		hospital.GET("/list", patient.GetHospitalList)  // 医院列表
		hospital.GET("/:id", patient.GetHospitalDetail) // 医院详情
	}

	// 科室相关（公开查询）
	//department := r.Group("/api/department")
	//{
	//	department.GET("/list", patient.GetDepartmentList)                    // 科室列表
	//	department.GET("/:id", patient.GetDepartmentDetail)                   // 科室详情
	//	department.GET("/children/:parentId", patient.GetChildrenDepartments) // 二级科室列表
	//}

	// 疾病相关（公开查询）
	//disease := r.Group("/api/disease")
	//{
	//	disease.GET("/list", patient.GetDiseaseList)  // 疾病列表
	//	disease.GET("/:id", patient.GetDiseaseDetail) // 疾病详情
	//}

	// 医生相关（公开查询）
	doctorPublic := r.Group("/api/doctor")
	{
		doctorPublic.GET("/list", patient.GetDoctorList)                                 // 医生列表
		doctorPublic.GET("/by-hospital/:hospitalId", patient.GetDoctorsByHospital)       // 按医院查询医生
		doctorPublic.GET("/by-department/:departmentId", patient.GetDoctorsByDepartment) // 按科室查询医生
		doctorPublic.GET("/by-disease/:diseaseId", patient.GetDoctorsByDisease)          // 按疾病查询医生
		doctorPublic.GET("/:id", patient.GetDoctorDetail)                                // 医生详情
	}

	// 药品相关（公开查询）
	//medicine := r.Group("/api/medicine")
	//{
	//	medicine.GET("/list", patient.GetMedicineList)         // 药品列表
	//	medicine.GET("/category", patient.GetMedicineCategory) // 药品分类
	//	medicine.GET("/:id", patient.GetMedicineDetail)        // 药品详情
	//}

	// ==================== 患者端需要认证的接口 ====================
	// 使用患者端认证中间件，验证患者身份
	patientAuth := r.Group("/api")
	patientAuth.Use(middleware.PatientAuthToken()) // 患者认证中间件
	{
		// 用户登出
		//patientAuth.POST("/user/logout", patient.Logout)

		// ========== 患者信息管理 ==========
		patientGroup := patientAuth.Group("/patient")
		{
			patientGroup.GET("/info", patient.GetInfo)   // 获取患者信息
			patientGroup.POST("/verify", patient.Verify) // 患者实名认证
			patientGroup.PUT("/update", patient.Update)  // 更新患者档案
			patientGroup.GET("/list", patient.GetList)   // 患者列表（就诊人列表）
			patientGroup.POST("/add", patient.Add)       // 新增患者（就诊人）
			patientGroup.DELETE("/:id", patient.Delete)  // 删除患者
		}

		// ========== 地址管理 ==========
		address := patientAuth.Group("/address")
		{
			address.GET("/list", patient.GetAddressList)           // 地址列表
			address.POST("/add", patient.AddAddress)               // 添加地址
			address.PUT("/update/:id", patient.UpdateAddress)      // 更新地址
			address.DELETE("/delete/:id", patient.DeleteAddress)   // 删除地址
			address.PUT("/default/:id", patient.SetDefaultAddress) // 设置默认地址
		}

		// ========== 预约挂号 ==========
		appointment := patientAuth.Group("/appointment")
		{
			// --- 挂号流程 ---
			appointment.GET("/department/list", patient.GetDepartmentDoctors) // 按科室获取医师列表
			//appointment.GET("/disease/list", patient.GetDiseaseDepartments)    // 按疾病获取科室列表
			//appointment.GET("/disease/:id/doctors", patient.GetDiseaseDoctors) // 疾病对应的医师列表
			appointment.GET("/doctor/:id/schedule", patient.GetDoctorSchedule) // 医师排班时间表
			//appointment.GET("/doctor/:id/info", patient.GetDoctorClinicInfo)   // 医师门诊信息

			// --- 预约下单 ---
			appointment.POST("/create", patient.CreateAppointment) // 创建预约订单
			appointment.GET("/:id", patient.GetAppointmentDetail)  // 预约详情
			//appointment.PUT("/:id/patient", patient.SelectPatient)      // 选择就诊人
			//appointment.PUT("/:id/visit-type", patient.SelectVisitType) // 选择初/复诊

			// --- 预约支付 ---
			//payment := appointment.Group("/pay")
			//{
			//	payment.POST("/alipay", patient.PayWithAlipay) // 支付宝支付
			//	payment.POST("/wechat", patient.PayWithWechat) // 微信支付
			//	payment.POST("/offline", patient.PayOffline)   // 到院支付
			//
			//	// 支付回调（注意：实际项目中回调接口可能不需要认证）
			//	payment.POST("/callback/alipay", patient.AlipayCallback) // 支付宝回调
			//	payment.POST("/callback/wechat", patient.WechatCallback) // 微信回调
			//}
		}

		// ========== 问诊服务 ==========
		consultation := patientAuth.Group("/consultation")
		{
			//// --- 问诊医生查询 ---
			//consultation.GET("/doctor/by-department/:id", patient.GetConsultationDoctorsByDepartment) // 按科室查询问诊医生
			//consultation.GET("/doctor/by-disease/:id", patient.GetConsultationDoctorsByDisease)       // 按疾病查询问诊医生
			//consultation.GET("/doctor/by-hospital/:id", patient.GetConsultationDoctorsByHospital)     // 按医院查询问诊医生

			// --- 问诊下单 ---
			consultation.POST("/create", patient.CreateConsultation)         // 创建问诊订单
			consultation.POST("/:id/description", patient.SubmitDescription) // 提交病情描述
			//consultation.POST("/:id/upload", patient.UploadCasePhoto)           // 上传病例照片
			//consultation.PUT("/:id/patient", patient.SelectConsultationPatient) // 选择患者
			//consultation.PUT("/:id/type", patient.SelectConsultationType)       // 选择问诊方式（图文/电话/视频）

			// --- 问诊支付 ---
			//consultationPay := consultation.Group("/pay")
			//{
			//	consultationPay.POST("/alipay", patient.PayConsultationWithAlipay)           // 支付宝支付
			//	consultationPay.POST("/wechat", patient.PayConsultationWithWechat)           // 微信支付
			//	consultationPay.POST("/callback/alipay", patient.ConsultationAlipayCallback) // 支付宝回调
			//	consultationPay.POST("/callback/wechat", patient.ConsultationWechatCallback) // 微信回调
			//}

			//// --- 问诊会话 ---
			//consultation.GET("/:id/messages", patient.GetMessages) // 获取问诊消息记录
			//consultation.POST("/:id/message", patient.SendMessage) // 发送消息
			//consultation.POST("/:id/call", patient.InitiateCall)   // 发起电话/视频问诊
		}

		// ========== 开药服务 ==========
		//prescription := patientAuth.Group("/prescription")
		//{
		//	// --- 开药申请 ---
		//	prescription.POST("/create", patient.CreatePrescription)                     // 创建开药申请
		//	prescription.PUT("/:id/patient", patient.SelectPrescriptionPatient)          // 选择患者
		//	prescription.POST("/:id/description", patient.SubmitPrescriptionDescription) // 填写病情描述
		//	prescription.POST("/:id/upload", patient.UploadPrescription)                 // 上传处方
		//
		//	// --- 药品管理 ---
		//	prescription.POST("/:id/medicine", patient.AddMedicine)                  // 添加药品
		//	prescription.DELETE("/:id/medicine/:medicineId", patient.RemoveMedicine) // 删除药品
		//	prescription.GET("/:id/medicine/list", patient.GetSelectedMedicines)     // 已选药品清单
		//
		//	// --- 选择医生 ---
		//	prescription.GET("/doctor/list", patient.GetPrescriptionDoctorList) // 可开药医生列表
		//	prescription.PUT("/:id/doctor", patient.SelectPrescriptionDoctor)   // 选择开药医生
		//
		//	// --- 开药支付 ---
		//	prescriptionPay := prescription.Group("/pay")
		//	{
		//		prescriptionPay.POST("/alipay", patient.PayPrescriptionWithAlipay)           // 支付宝支付
		//		prescriptionPay.POST("/wechat", patient.PayPrescriptionWithWechat)           // 微信支付
		//		prescriptionPay.POST("/callback/alipay", patient.PrescriptionAlipayCallback) // 支付宝回调
		//		prescriptionPay.POST("/callback/wechat", patient.PrescriptionWechatCallback) // 微信回调
		//	}
		//}

		// ========== 订单管理 ==========
		order := patientAuth.Group("/order")
		{
			// --- 订单查询 ---
			order.GET("/list", patient.GetOrderList)                          // 订单列表
			order.GET("/:id", patient.GetOrderDetail)                         // 订单详情
			order.GET("/appointment/list", patient.GetAppointmentOrderList)   // 挂号订单列表
			order.GET("/consultation/list", patient.GetConsultationOrderList) // 问诊订单列表
			order.GET("/prescription/list", patient.GetPrescriptionOrderList) // 开药订单列表

			// --- 订单操作 ---
			order.PUT("/:id/cancel", patient.CancelOrder) // 取消订单
			//order.POST("/:id/pay", patient.PayOrder)       // 订单支付
			//order.POST("/:id/refund", patient.RefundOrder) // 申请退款
		}

		// ========== 消息通知 ==========
		//notification := patientAuth.Group("/notification")
		//{
		//	//notification.GET("/list", patient.GetNotificationList) // 通知列表
		//	//notification.PUT("/:id/read", patient.MarkAsRead)      // 标记已读
		//}
	}
}
